import axios from "axios";
import router from "@/router"
import { ElMessage } from 'element-plus'
import store from "../store"

const baseURL = "http://localhost:9999";

const service = axios.create({
    baseURL,
    timeout: 10 * 1000
})

service.interceptors.request.use((config)=>{
    // 判断是否在登录 放行
    if(config.url === "/admin/employee/login"){
        return config;
    }
    // 判断是否携带个人信息 是否存在token
    let userinfo = store.state.employee.userinfo;
    // 已经登录
    if(userinfo){
        console.log(22,userinfo.token)
        // 将token携带
        config.headers.token = userinfo.token;
        console.log(config)
        return config;
    }else {
        console.log(11)
        // 判断本地是否带
        userinfo = JSON.parse(localStorage.getItem("userinfo"));
        if(userinfo){
            store.commit("employee/setUserinfo",userinfo)
            // 将token携带
            config.headers['token'] = userinfo.token;
            return config;
        }
        // 未登录
        router.push("/login")
        return config;
    }
},err=>{
    Promise.reject(err)
})

service.interceptors.response.use((response)=>{
    console.log(response)
    if (response.data.status === 401) {
        console.log("401")
        router.push('/login')
        // const res = response.data
        // return response
    }
    const data = response.data;
    if(data.msg){
        ElMessage({
            message: data.msg,
            type: 'success',
        })
    }
    return data;
},error=>{
    console.log(error)
/***** 接收到异常响应的处理开始 *****/
if (error && error.response) {

    // 1.公共错误处理
    // 2.根据响应码具体处理
    switch (error.response.status) {
      case 400:
        error.message = '错误请求'
        break;
      case 401:
          store.commit("employee/removeUserinfo")
          router.push("/login")
        break;
      case 403:
        error.message = '拒绝访问'
        break;
      case 404:
        error.message = '请求错误,未找到该资源'
        window.location.href = "/NotFound"
        break;
      case 405:
        error.message = '请求方法未允许'
        break;
      case 408:
        error.message = '请求超时'
        break;
      case 500:
        error.message = '服务器端出错'
        break;
      case 501:
        error.message = '网络未实现'
        break;
      case 502:
        error.message = '网络错误'
        break;
      case 503:
        error.message = '服务不可用'
        break;
      case 504:
        error.message = '网络超时'
        break;
      case 505:
        error.message = 'http版本不支持该请求'
        break;
      default:
        error.message = `连接错误${error.response.status}`
    }
  } else {
    // 超时处理
    if (JSON.stringify(error).includes('timeout')) {
        ElMessage({
            message: '服务器响应超时，请刷新当前页',
            type: 'error',
        })
    }
    error.message = '连接服务器失败'
  }
    ElMessage({
        message: '服务器响应超时，请刷新当前页',
        type: error.message,
    })
  /***** 处理结束 *****/
  //如果不需要错误处理，以上的处理过程都可省略
  return Promise.reject(error)
})

export default service;
